#include "RespuestaBitField.h"

RespuestaBitField::RespuestaBitField(const string &bitFields) {
	this->piezas = this->obtenerListaPieces(bitFields);
}

RespuestaBitField::~RespuestaBitField() {

}

list<unsigned long int> RespuestaBitField::getPiezas() const {

	return this->piezas;
}

string RespuestaBitField::getTipo() const {

	return "bitfield";
}


void RespuestaBitField::bitsSeteados(const unsigned char byte, int *vector) {
	unsigned char a = byte;

	for(int i = 7; 0 <= i ; i--){
		vector[i] = a % 2;
		a = a / 2;
	}
}

list<unsigned long int> RespuestaBitField::obtenerListaPieces(const string &s) {

	list<unsigned long int> listaPieces;
	int vec[8];

	for (unsigned int i = 0 ; i < s.size() ; i++) {

		unsigned char aux = s[i];
		bitsSeteados(aux, vec);
		for ( int j = 0 ; j < 8 ; j++ ) {
			if (vec[j]) {
				listaPieces.push_back(i*8 + j);
			}
		}
	}

	return listaPieces;
}
